热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

国际版|程度_docker4dotnet#2容器化主机

篇首语:本文由编程笔记#小编为大家整理,主要介绍了docker4dotnet#2容器化主机相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了docker4dotnet #2 容器化主机相关的知识,希望对你有一定的参考价值。



.NET 猿自从认识了小鲸鱼,感觉功力大增。上篇《docker4dotnet #1 前世今生&世界你好》中给大家介绍了如何在Windows上面配置Docker for Windows和Docker Tools for Visual Studio来使用docker协助.NET Core应用的开发,这篇我们来看看如何创建和管理容器化主机。

所谓容器化主机Dockerized Host,就是安装了docker engine的主机,可以使用docker工具进行管理。使用docker来协助开发,我们至少需要本地和云端的容器化主机,本地用于开发,测试,打包;云端的用于生产环境发布。使用容器化主机我们可以将所有的环境标准化,也即是使用统一的docker工具来完成容器在不同环境中的迁移(搬运),真正将容器化开发的优势发挥出来。


使用docker发布应用与以往的应用发布方式有很大不同,从上图中可以看出。


  • 因为应用本身与依赖,应用服务器和操作系统都是分离的;我们在自动化过程中就必须处理各种不同的场景,难以标准化;而使用容器技术,我们就可以将自动化简化为对容器的搬运。
  • 各种依赖的解决都集中在开发环境中完成,常见的npm,nexus, nuget等工具都是开发人员很熟悉的,这些依赖的获取都可以由开发人员自己解决,在后续的自动化中无需再次处理。
  • 仅从自动化的复杂程度来说,你可以很明显的看出传统开发中自动化会变成各种复杂情况的汇聚点,这就是为什么做CI/CD需要如此复杂的工具;如果再考虑不同种类的工具,如:Jenkins/TeamCity/Travis,Chef/Puppet等,这个环境会变的非常难以控制和维护。
  • 以往我们必须给不同的应用创建不同的运行环境,而且这个环境必须从操作系统开始一层层搭建;使用容器话之后,不同类型的应用可以运行在统一的操作系统层之上,大大提高了资源利用率和灵活性。

在不同的环境中统一使用容器化主机就是向着容器化开发演进的第一步,也是大幅降低自动化系统复杂程度的第一步。


创建容器化主机


今天给大家介绍一下docker工具集中用来管理容器化主机的工具 docker-machine。上一篇文章中我们提到 Docker for Windows 其实是在 Hyper-V 中创建了一台运行着 docker daemon 守护程序的 linux vm 来接收 windows 命令行中运行的 docker 指令的,在你第一次启动 docker for windows 的过程中, docker-machine 工具完成了这个 vm 的初始化工作。


这个初始化的操作很简单,如果你已经安装了 docker for windows,可以打开命令行(注意:一定要用管理员权限),然后键入如下命令;


docker-machine create --driver hyperv machine-name


这样,docker-machine 就完成了在你本地的hyper-v上初始化一台可以运行容器的vm(一般称为Dockerized host 容器化主机)的工作了。



注:在以上过程中如果docker-machine无法在本地找到boot2docker.iso这个文件的话,会从网络上下载,这个过程会很慢,我已经将这个文件上传到了 d4dtools 的网站盘中,请在公众号中输入 d4dtools 获取。


下载后放入当前用户的~\\.docker\\machine\\cache\\ 这个目录即可。



完成初始化后,如果你希望让docker命令直接对这个新的主机进行操作,可以运行下面的命令。


@FOR /f "tokens=*" %i IN ('docker-machine env machine-name') DO @%i

注意将machine-name替换成你自己的容器化主机名称,这个命令会设置以下三个环境变量


SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://xxx.xxx.xxx.xxx:2376
SET DOCKER_CERT_PATH=C:\\Users\\LeiXu\\.docker\\machine\\machines\\machine-name
SET DOCKER_MACHINE_NAME=machine-name

完成后如果运行 docker 命令,那么你所使用的就是新的容器化主机了。


Docker-Machine 的环境驱动


上面的命令中你会注意到 –driver hyperv 这个参数,docker 提供了很多驱动可以让你在不同的环境中一键创建容器化主机,这些环境包括:


– Virtual Box (virtualbox)
– Hyper-V (hyperv)
– Azure (azure)
– Aws (amazonec2)
– VMware Fusion (vmwarefusion)
– VMware vCloud Air (vmwarevcloudair)
– Vmware vSphere (vmwarevshpere)
– …


括号中的内容就是驱动的命令参数,完整的列表可以访问:
https://docs.docker.com/machine/reference/create


另外,阿里云也提供了driver,不过并不在docker 官方列表中
https://github.com/denverdino/docker-machine-driver-aliyunecs


小编测试了以下几个环境



Azure 国际版命令:


docker-machine create --driver azure --azure-subscription-id sub-id --azure-open-port 80 machine-name

Azure 世纪互联版命令:


docker-machine create --driver azure --azure-environment "AzureChinaCloud" --azure-subscription-id sub-id --azure-open-port 80 --azure-location "ChinaNorth" machine-name

AWS 国际版命令:


docker-machine create --driver amazonec2 --amazonec2-region "ap-northeast-1" --amazonec2-vpc-id vpc-id machine-name

这些命令都可以提供丰富的参数来控制主机的操作系统镜像,主机配置大小,网络连接,主机位置等。大家可以通过以下命令获取这些参数的详情:


docker-machine create --driver driver-name

这些主机创建好以后,如果要列出所有绑定到你自己环境上主机,可以运行:


docker-machine ls

如果你需要直接登陆到主机上进行操作,可以 运行:


docker-machine ssh machine-name

因为docker-machine在创建主机的过程中已经自动完成了public key的生成和配置,你无须输入用户名和密码就可以ssh进入主机进行操作,所有这些public key的证书文件都存放在 ~\\.docker\\machine的目录下面。


注:因为网络的原因,这些操作有可能失败。如果遇到这种情况,先进入云平台的控制台查看相关的资源是否都创建成功呢了,如果已经资源已经在那里了。尝试运行:


docker-machine regenerate-certs machine-name

这样会强制宿主机的 docker deamon 重启,一般来说可以解决问题。


使用docker-machine这个工具,你可以完成容器化主机的创建,启动,关闭等主要操作;而不必通过云提供商的控制台来完成,也就是说你本地的docker环境就变成中对于所有开发,测试和生产环境的控制台;通过docker所提供的命令,你可以完成从应用打包,环境创建,发布部署的整个过程。当然,如果你的团队比较大,其中的一些步骤还是需要借助自动化系统来完成,这样才能完成代码的集成和团队协同,安全性控制和集群环境的编排也是需要考虑的问题。这些,我们将在后续的文章中给大家提供解决方案。


将应用发布到云端


到了这里,小编到觉得没啥可说的了,docker的发布实在是简单!简单!简单!重要事情说三遍。


进入你的应用目录调用那个 dockertask.ps1 脚本,就可以完成应用的打包和image上传操作


.\\DockerTask.ps1 -Build -Environment Release -Machine machine-name


然后运行


docker images

就可以看到已经上传到你的目标宿主机上面的 images,这时就可以运行 docker run 了 (注意:要确保你正确配置了 宿主机的环境变量)


docker run -p 80:80 username/webapp01:latest



注:这个过程中你可能会碰到docker版本不匹配的问题



你可以安装 docker version manager 这个工具,然后使用以下命令来获取使用正确版本


dvm install version
dvm use version


安装命令(Poweshell):


Invoke-WebRequest https://download.getcarina.com/dvm/latest/install.ps1 -UseBasicParsing | Invoke-Expression



小结


到这里,我们就完成了本地和云端的docker环境的创建,并进行了最简单的应用部署。你可以看到,docker 提供了一套简单易用的工具和部署方式,让我们的应用开发,调试和打包部署都变的非常快捷。下一篇中我们将介绍如何使用macOS环境完成.net core应用的创建,调试和docker打包部署过程。




 


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息



推荐阅读
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Jenkins 安装指南:Windows 平台详解
    本文详细介绍了如何在Windows平台上安装和配置Jenkins,包括安装步骤、启动方法及基本的系统配置,旨在帮助初次使用者顺利搭建持续集成环境。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 邮件(带附件,模拟文件上传,跨服务器)发送核心代码1.测试邮件发送附件接口***测试邮件发送附件*@parammultipartFile*@return*@RequestMappi ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • Jenkins更新指南
    本文档详细介绍了如何准备和执行Jenkins的升级过程,包括从官方源下载最新镜像、镜像的本地处理与上传至私有仓库,以及通过修改配置文件和重启服务完成Jenkins的版本更新。 ... [详细]
author-avatar
游必有方RK
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有